package redis_springboot.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import redis.clients.jedis.Jedis;

/**
 * @author： pang-yun
 * @date： 2021-12-06 15:29
 * 功能目的 ：用于
 */

@RestController
@RequestMapping("/redisDemo")
public class RedisController {
    @Autowired
    private RedisTemplate redisTemplate;


    @GetMapping("/redis")
    public String redis(){
        redisTemplate.opsForValue().set("z","pang");

        return (String) redisTemplate.opsForValue().get("z");
    }





    /**
     *  // 秒杀 模拟
     * @param uid    用户id
     * @param productId  产品 id
     * @return
     */
    public static boolean doSecKill(String uid, String productId){
        //1. UID 和 proid 非空操作
        if (uid ==null || productId ==null){
            return false;
        }
        //2. 连接redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        // 3.开始拼接 key
        // 库存
        String kcKey ="sk" +productId+ ":qt";
        //用户
        String userKey = "sk"+uid+":user";

        //4.获取库存 如果库存是null 秒杀还没有开始
        String kc = jedis.get(kcKey);
        if (kc==null){
            System.out.println("库存没有开始，请等待！");
            jedis.close();
            return false;
        }

        //5. 判断用户是否重复秒杀
        if (jedis.sismember(userKey,uid)){
            System.out.println("已经秒杀成功！不能重复秒杀");
            jedis.close();
            return false;
        }

        //6.判断库存数量，如果库存数量小于·1  秒杀结束
        if (Integer.parseInt(kc)<=0){
            System.out.println("秒杀结束！ ");
            jedis.close();
            return false;
        }

        //7. 秒杀过程
        //  库存减一
        jedis.decr(kc);
        //将秒杀成功的用户添加到清单里面
        jedis.sadd(userKey,uid);
        System.out.println("秒杀成功");
        jedis.close();
        return true;

    }

}
